package map;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.Consumer;

/**
 * Map的遍历，支持三种遍历方式:
 * 1.遍历所有的key
 * 2.遍历所有的value(相对不常用)
 * 3.遍历所有的键值对
 */
public class MapDemo2 {
    public static void main(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("语文",99);
        map.put("数学",98);
        map.put("英语",97);
        map.put("物理",96);
        map.put("化学",99);
        System.out.println(map); //{物理=96, 数学=98, 化学=99, 语文=99, 英语=97}

        /*
         * 遍历所有的key
         * Set<K> keySet()
         * 将当前map中所有的key以一个Set集合的形式返回
         */
        Set<String> keySet = map.keySet();
        for(String key : keySet){
            System.out.println("key:"+key);
        }

        /*
         遍历所有的value
         Collection<V> values()
         将当前map中的所有value以一个集合的形式返回
         */
        Collection<Integer> values = map.values();
        for(Integer value : values){
            System.out.println("value:"+value);
        }

        /*
         遍历所有的键值对
         Set<Map.Entry<K,V>> entrySet()
         当前map中的每一组键值对以一个Entry实例表示，将所有键值对以Set集合返回
         */
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        for(Map.Entry<String,Integer> e : entrySet){ //e代表每一个键值对
            String key = e.getKey(); //获取key键
            Integer value = e.getValue(); //获取value值
            System.out.println("key:"+key+"，value:"+value);
        }
        System.out.println("----------------------------");

        /*
          jdk8之后，集合和map提供了forEach方法，基于lambda表达式遍历
         */
        keySet.forEach(new Consumer<String>() {
            @Override
            public void accept(String s) {
                System.out.println(s);
            }
        });
        keySet.forEach(System.out::println);
        values.forEach(System.out::println);
        entrySet.forEach(e->System.out.println(e.getKey()+":"+e.getValue()));
        map.forEach((k,v)->System.out.println(k+":"+v));

    }
}
















